home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / program / 322 / patch / configur < prev    next >
Text File  |  1988-10-20  |  17KB  |  677 lines

  1. #! /bin/sh
  2. # If these # comments don't work, trim them.  Don't worry about any other
  3. # shell scripts, Configure will trim # comments from them for you.
  4. #
  5. # Note: if you are running ksh, be sure to say "sh Configure".
  6. #
  7. # (If you are trying to port this package to a machine without sh, I would
  8. # suggest you cut out the prototypical config.h from the end of Configure
  9. # and edit it to reflect your system.  Some packages may include samples
  10. # of config.h for certain machines, so you might look for one of those.)
  11. #
  12. # $Header: Configure,v 2.0 86/09/17 15:32:58 lwall Exp $
  13. #
  14. # $Log:    Configure,v $
  15. # Revision 2.0  86/09/17  15:32:58  lwall
  16. # Baseline for netwide release.
  17. #
  18. # Yes, you may rip this off to use in other distribution packages.
  19. #
  20. # (Note: this Configure script was generated automatically.  Rather than
  21. # working with this copy of Configure, you may wish to get metaconfig.)
  22.  
  23. define='define'
  24. undef='/*undef'
  25.  
  26. d_eunice=''
  27. eunicefix=''
  28. loclist=''
  29. expr=''
  30. sed=''
  31. echo=''
  32. cat=''
  33. rm=''
  34. mv=''
  35. cp=''
  36. tail=''
  37. tr=''
  38. mkdir=''
  39. sort=''
  40. uniq=''
  41. grep=''
  42. trylist=''
  43. test=''
  44. inews=''
  45. egrep=''
  46. more=''
  47. pg=''
  48. Mcc=''
  49. vi=''
  50. mailx=''
  51. Log=''
  52. Header=''
  53. bin=''
  54. cc=''
  55. contains=''
  56. cpp=''
  57. d_index=''
  58. d_void=''
  59. iandd=''
  60. libc=''
  61. mansrc=''
  62. manext=''
  63. n=''
  64. c=''
  65. package=''
  66. registers=''
  67. reg1=''
  68. reg2=''
  69. reg3=''
  70. reg4=''
  71. reg5=''
  72. reg6=''
  73. reg7=''
  74. reg8=''
  75. reg9=''
  76. reg10=''
  77. reg11=''
  78. reg12=''
  79. reg13=''
  80. reg14=''
  81. reg15=''
  82. reg16=''
  83. spitshell=''
  84. shsharp=''
  85. sharpbang=''
  86. startsh=''
  87. CONFIG=''
  88.  
  89. package=patch
  90.  
  91. echo "Beginning of configuration questions for $package kit."
  92. : Eunice requires " " instead of "", can you believe it
  93. echo " "
  94.  
  95. : sanity checks
  96. PATH='.:/bin:/usr/bin:/usr/local/bin:/usr/ucb:/usr/local:/usr/lbin:/etc'
  97. export PATH || (echo "OOPS, this isn't sh.  Desperation time.  I will feed myself to sh."; sh $0; kill $$)
  98.  
  99. if test ! -t 0; then
  100.     echo "Say 'sh Configure', not 'sh <Configure'"
  101.     exit 1
  102. fi
  103.  
  104. : some greps do not return status, grrr.
  105. echo "grimblepritz" >grimble
  106. if grep blurfldyick grimble >/dev/null 2>&1 ; then
  107.     contains=contains
  108. else
  109.     if grep grimblepritz grimble >/dev/null 2>&1 ; then
  110.     contains=grep
  111.     else
  112.     contains=contains
  113.     fi
  114. fi
  115. rm -f grimble
  116. : the following should work in any shell
  117. case "$contains" in
  118. contains*)
  119.     echo " "
  120.     echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
  121.     cat >contains <<'EOSS'
  122. grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
  123. EOSS
  124. chmod 755 contains
  125. esac
  126.  
  127. : first determine how to suppress newline on echo command
  128. echo "Checking echo to see how to suppress newlines..."
  129. (echo "hi there\c" ; echo " ") >.echotmp
  130. if $contains c .echotmp >/dev/null 2>&1 ; then
  131.     echo "...using -n."
  132.     n='-n'
  133.     c=''
  134. else
  135.     echo "...using \\\c"
  136.     echo "c."
  137.     n=''
  138.     c='\c'
  139. fi
  140. echo $n "Type carriage return to continue.  Your cursor should be here-->$c"
  141. read ans
  142. rm -f .echotmp
  143.  
  144. : now set up to do reads with possible shell escape
  145. : if this does not work on your machine, 1,$ s/. myread/read ans/
  146. cat <<EOSC >myread
  147. ans='!'
  148. while expr "X\$ans" : "X!" >/dev/null; do
  149.     read ans
  150.     case "\$ans" in
  151.     !)
  152.     sh
  153.     echo " "
  154.     echo $n "\$rp $c"
  155.     ;;
  156.     !*)
  157.     set \`expr "X\$ans" : "X!\(.*\)\$"\`
  158.     sh -c "\$*"
  159.     echo " "
  160.     echo $n "\$rp $c"
  161.     ;;
  162.     esac
  163. done
  164. rp='Your answer:'
  165. EOSC
  166.  
  167. : general instructions
  168. cat <<EOH
  169.  
  170. This installation shell script will examine your system and ask you questions
  171. to determine how $package and any auxiliary files should be installed.  If you
  172. get stuck on a question, you may use a ! shell escape to start a subshell or
  173. execute a command.  Many of the questions will have default answers in
  174. square brackets--typing carriage return will give you the default.
  175.  
  176. On some of the questions which ask for file or directory names you are
  177. allowed to use the ~name construct to specify the login directory belonging
  178. to "name", even if you don't have a shell which knows about that.  Questions
  179. where this is allowed will be marked "(~name ok)".
  180. EOH
  181. rp="[Type carriage return to continue]"
  182. echo $n "$rp $c"
  183. . myread
  184. cat <<EOH
  185. Much effort has been expended to ensure that this shell script will run
  186. on any Unix system.  If despite that it blows up on you, your best bet is
  187. to edit Configure and run it again.  (Trying to install this package
  188. without having run Configure may be well nigh impossible.)  Also, let me
  189. (lwall@sdcrdcf.UUCP) know how I blew it.
  190.  
  191. This installation script affects things in two ways: 1) it may do direct
  192. variable substitutions on some of the files included in this kit, and
  193. 2) it builds a config.h file for inclusion in C programs.  You may edit
  194. any of these files as the need arises after running this script.
  195.  
  196. EOH
  197. rp="[Type carriage return to continue]"
  198. echo $n "$rp $c"
  199. . myread
  200.  
  201. : get old answers, if there is a config file out there
  202. if test -f config.sh; then
  203.     echo " "
  204.     rp="I see a config.sh file.  Did Configure make it on THIS system? [y]"
  205.     echo $n "$rp $c"
  206.     . myread
  207.     case "$ans" in
  208.     n*) echo "OK, I'll ignore it.";;
  209.     *)  echo "Fetching default answers from your old config.sh file..."
  210.         . config.sh
  211.     ;;
  212.     esac
  213. fi
  214.  
  215. : get list of predefined functions in a handy place
  216. echo " "
  217. if test -f /lib/libc.a; then
  218.     echo "Your C library is in /lib/libc.a.  You're normal."
  219.     libc=/lib/libc.a
  220. else
  221.     if test -f /usr/lib/libc.a; then
  222.     echo "Your C library is in /usr/lib/libc.a, of all places."
  223.     libc=/usr/lib/libc.a
  224.     else
  225.     if test -f "$libc"; then
  226.         echo "Your C library is in $libc, like you said before."
  227.     else
  228.         cat <<'EOM'
  229.  
  230. I can't seem to find your C library.  I've looked for /lib/libc.a and
  231. /usr/lib/libc.a, but neither of those are there.  What is the full name
  232. EOM
  233.         echo $n "of your C library? $c"
  234.         rp='C library full name?'
  235.         . myread
  236.         libc="$ans"
  237.     fi
  238.     fi
  239. fi
  240. echo " "
  241. echo $n "Extracting names from $libc for later perusal...$c"
  242. if ar t $libc > libc.list; then
  243.     echo "done"
  244. else
  245.     echo " "
  246.     echo "The archiver doesn't think $libc is a reasonable library."
  247.     exit 1
  248. fi
  249.  
  250. : make some quick guesses about what we are up against
  251. echo " "
  252. echo $n "Hmm...  $c"
  253. if $contains SIGTSTP /usr/include/signal.h >/dev/null 2>&1 ; then
  254.     echo "Looks kind of like a BSD system, but we'll see..."
  255.     echo exit 0 >bsd
  256.     echo exit 1 >usg
  257.     echo exit 1 >v7
  258. else
  259.     if $contains fcntl libc.list >/dev/null 2>&1 ; then
  260.     echo "Looks kind of like a USG system, but we'll see..."
  261.     echo exit 1 >bsd
  262.     echo exit 0 >usg
  263.     echo exit 1 >v7
  264.     else
  265.     echo "Looks kind of like a version 7 system, but we'll see..."
  266.     echo exit 1 >bsd
  267.     echo exit 1 >usg
  268.     echo exit 0 >v7
  269.     fi
  270. fi
  271. if $contains vmssystem libc.list >/dev/null 2>&1 ; then
  272.     cat <<'EOI'
  273. There is, however, a strange, musty smell in the air that reminds me of
  274. something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
  275. EOI
  276.     echo "exit 0" >eunice
  277.     eunicefix=unixtovms
  278.     d_eunice="$define"
  279. : it so happens the Eunice I know will not run shell scripts in Unix format
  280. else
  281.     echo " "
  282.     echo "Congratulations.  You aren't running Eunice."
  283.     eunicefix=':'
  284.     d_eunice="$undef"
  285.     echo "exit 1" >eunice
  286. fi
  287. chmod 755 bsd usg v7 eunice
  288. $eunicefix bsd usg v7 eunice
  289.  
  290. : see if sh knows # comments
  291. echo " "
  292. echo "Checking your sh to see if it knows about # comments..."
  293. if sh -c '#' >/dev/null 2>&1 ; then
  294.     echo "Your sh handles # comments correctly."
  295.     shsharp=true
  296.     spitshell=cat
  297.     echo " "
  298.     echo "Okay, let's see if #! works on this system..."
  299.     echo "#!/bin/echo hi" > try
  300.     $eunicefix try
  301.     chmod 755 try
  302.     try > today
  303.     if test -s today; then
  304.     echo "It does."
  305.     sharpbang='#!'
  306.     else
  307.     echo "#! /bin/echo hi" > try
  308.     $eunicefix try
  309.     chmod 755 try
  310.     try > today
  311.     if test -s today; then
  312.         echo "It does."
  313.         sharpbang='#! '
  314.     else
  315.         echo "It doesn't."
  316.         sharpbang=': use '
  317.     fi
  318.     fi
  319. else
  320.     echo "Your sh doesn't grok # comments--I will strip them later on."
  321.     shsharp=false
  322.     echo "exec grep -v '^#'" >spitshell
  323.     chmod 755 spitshell
  324.     $eunicefix spitshell
  325.     spitshell=`pwd`/spitshell
  326.     echo "I presume that if # doesn't work, #! won't work either!"
  327.     sharpbang=': use '
  328. fi
  329.  
  330. : figure out how to guarantee sh startup
  331. echo " "
  332. echo "Checking out how to guarantee sh startup..."
  333. startsh=$sharpbang'/bin/sh'
  334. echo "Let's see if '$startsh' works..."
  335. cat >try <<EOSS
  336. $startsh
  337. set abc
  338. test "$?abc" != 1
  339. EOSS
  340.  
  341. chmod 755 try
  342. $eunicefix try
  343. if try; then
  344.     echo "Yup, it does."
  345. else
  346.     echo "Nope.  You may have to fix up the shell scripts to make sure sh runs them."
  347. fi
  348. rm -f try today
  349.  
  350. : find out where common programs are
  351. echo " "
  352. echo "Locating common programs..."
  353. pth="/usr/ucb /bin /usr/bin /usr/local /usr/local/bin /usr/lbin /etc /usr/lib"
  354. cat <<EOSC >loc
  355. $startsh
  356. thing=\$1
  357. shift
  358. dflt=\$1
  359. shift
  360. for dir in \$*; do
  361.     case "\$thing" in
  362.     .)
  363.     if test -d \$dir/\$thing; then
  364.         echo \$dir
  365.         exit 0
  366.     fi
  367.     ;;
  368.     *)
  369.     if test -f \$dir/\$thing; then
  370.         echo \$dir/\$thing
  371.         exit 0
  372.     fi
  373.     ;;
  374.     esac
  375. done
  376. echo \$dflt
  377. exit 1
  378. EOSC
  379. chmod 755 loc
  380. $eunicefix loc
  381. loclist="
  382. expr
  383. sed
  384. echo
  385. cat
  386. rm
  387. grep
  388. "
  389. trylist="
  390. test
  391. Mcc
  392. "
  393. for file in $loclist; do
  394.     xxx=`loc $file $file $pth`
  395.     eval $file=$xxx
  396.     case "$xxx" in
  397.     /*)
  398.     echo $file is in $xxx.
  399.     ;;
  400.     *)
  401.     echo "I don't know where $file is.  I hope it's in everyone's PATH."
  402.     ;;
  403.     esac
  404. done
  405. echo " "
  406. echo "Don't worry if any of the following aren't found..."
  407. ans=offhand
  408. for file in $trylist; do
  409.     xxx=`loc $file $file $pth`
  410.     eval $file=$xxx
  411.     case "$xxx" in
  412.     /*)
  413.     echo $file is in $xxx.
  414.     ;;
  415.     *)
  416.     echo "I don't see $file out there, $ans."
  417.     ans=either
  418.     ;;
  419.     esac
  420. done
  421. case "$egrep" in
  422. egrep)
  423.     echo "Substituting grep for egrep."
  424.     egrep=$grep
  425.     ;;
  426. esac
  427. case "$test" in
  428. test)
  429.     echo "Hopefully test is built into your sh."
  430.     ;;
  431. /bin/test)
  432.     echo " "
  433.     echo $n 'Is your "test" built into sh? [n] (OK to guess) '"$c"
  434.     rp='test built into sh? [n]'
  435.     . myread
  436.     case "$ans" in
  437.     y*) test=test ;;
  438.     esac
  439.     ;;
  440. *)
  441.     test=test
  442.     ;;
  443. esac
  444. case "$echo" in
  445. echo)
  446.     echo "Hopefully echo is built into your sh."
  447.     ;;
  448. /bin/echo)
  449.     echo " "
  450.     echo "Checking compatibility between /bin/echo and builtin echo (if any)..."
  451.     $echo $n "hi there$c" >foo1
  452.     echo $n "hi there$c" >foo2
  453.     if cmp foo1 foo2 >/dev/null 2>&1; then
  454.     echo "They are compatible.  In fact, they may be identical."
  455.     else
  456.     echo "They are not compatible--the echo builtin will be used."
  457.     echo=echo
  458.     fi
  459.     $rm -f foo1 foo2
  460.     ;;
  461. *)
  462.     echo=echo
  463.     ;;
  464. esac
  465.  
  466. : index or strcpy
  467. $echo " "
  468. if $contains index libc.list >/dev/null 2>&1 ; then
  469.     $echo "Your system appears to use index() and rindex() rather than strchr()"
  470.     $echo $n "and strrchr().  Is this correct? [y] $c"
  471.     rp='index() rather than strchr()? [y]'
  472.     . myread
  473.     case "$ans" in
  474.     n*|f*) d_index="$define" ;;
  475.     *)     d_index="$undef" ;;
  476.     esac
  477. else
  478.     $echo "Your system appears to use strchr() and strrchr() rather than index()"
  479.     $echo $n "and rindex().  Is this correct? [y] $c"
  480.     rp='strchr() rather than index()? [y]'
  481.     . myread
  482.     case "$ans" in
  483.     n*|f*) d_index="$undef" ;;
  484.     *)     d_index="$define" ;;
  485.     esac
  486. fi
  487.  
  488. : check for void type
  489. $echo " "
  490. $echo "Checking to see if your C compiler groks the void type..."
  491. $cat >try.c <<'EOCP'
  492. void main();
  493. EOCP
  494. if cc -c try.c >/dev/null 2>&1 ; then
  495.     d_void="$undef"
  496.     $echo "Yup, it does."
  497. else
  498.     d_void="$define"
  499.     $echo "Nope, it doesn't (boo hiss).  I will substitute int."
  500. fi
  501. $rm -f try.*
  502.  
  503. : see how we invoke the C preprocessor
  504. echo " "
  505. echo "Checking to see how your C preprocessor is invoked..."
  506. cat <<'EOT' >testcpp.c
  507. #define ABC abc
  508. #define XYZ xyz
  509. ABC.XYZ
  510. EOT
  511. echo 'Maybe "cc -E" will work...'
  512. cc -E testcpp.c >testcpp.out 2>&1
  513. if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
  514.     echo "Yup, it does."
  515.     cpp='cc -E'
  516. else
  517.     echo 'Nope...maybe "cc -P" will work...'
  518.     cc -P testcpp.c >testcpp.out 2>&1
  519.     if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
  520.     echo "Yup, that does."
  521.     cpp='cc -P'
  522.     else
  523.     echo 'Nixed again...maybe "/lib/cpp" will work...'
  524.     /lib/cpp testcpp.c >testcpp.out 2>&1
  525.     if $contains 'abc.xyz' testcpp.out >/dev/null 2>&1 ; then
  526.         echo "Hooray, it works!  I was beginning to wonder."
  527.         cpp='/lib/cpp'
  528.     else
  529.         echo 'Hmm...maybe you already told me...'
  530.         case "$cpp" in
  531.         '') ;;
  532.         *) $cpp testcpp.c >testcpp.ou component. */
  533. X    if (chdir(p) < 0 && mkdir(p, 0777) < 0 && chdir(p) < 0)
  534. X        Quit("Cannot chdir nor mkdir desired directory");
  535. X    }
  536. X    else
  537. X    cwd[0] = '\0';
  538. X
  539. X    /* No buffering. */
  540. X    (void)setbuf(stdout, (char *)NULL);
  541. X    (void)setbuf(stderr, (char *)NULL);
  542. X
  543. X    if (*av)
  544. X    /* Process filenames from command line. */
  545. X    for (; *av; av++) {
  546. X        if (cwd[0] && av[0][0] != '/') {
  547. X        (void)sprintf(buff, "%s/%s", cwd, *av);
  548. X        *av = buff;
  549. X        }
  550. X        if ((Stream = fopen(*av, "r")) == NULL)
  551. X        Fprintf(stderr, "unshar:  Can't open file '%s'.\n", *av);
  552. X        else {
  553. X        Unshar(*av, HdrFile, Stream, Saveit, Forced);
  554. X        (void)fclose(Stream);
  555. X        }
  556. X    }
  557. X    else
  558. X    /* Do standard input. */
  559. X    Unshar((char *)NULL, HdrFile, stdin, Saveit, Forced);
  560. X
  561. X    /* That's all she wrote. */
  562. X    exit(0);
  563. X}
  564. SHAR_EOF
  565. if test 8368 -ne "`wc -c < 'unshar.c'`"
  566. then
  567.     echo shar: error transmitting "'unshar.c'" '(should have been 8368 characters)'
  568. fi
  569. fi # end of overwriting check
  570. echo shar: extracting "'unshar.man'" '(2326 characters)'
  571. if test -f 'unshar.man'
  572. then
  573.     echo shar: will not over-write existing file "'unshar.man'"
  574. else
  575. sed 's/^X//' << \SHAR_EOF > 'unshar.man'
  576. X.TH UNSHAR 1l
  577. X.\" $Header: unshar.man,v 2.0 88/05/27 13:29:02 rsalz Exp $
  578. X.SH NAME
  579. Xunshar \- unpack shell archives from news, mail, notes, etc.
  580. X.SH SYNOPSIS
  581. X.B unshar
  582. X[
  583. X.BI \-c\| directory
  584. X] [
  585. X.BI \-d\| directory
  586. X] [
  587. X.BI \-h\| file
  588. X] [
  589. X.B \-f
  590. X] [
  591. X.B \-n
  592. X] [
  593. X.B \-s
  594. X] [ file... ]
  595. X.SH DESCRIPTION
  596. X.I Unshar
  597. Xremoves mail and news header lines from its input, and feeds the remainder
  598. Xto
  599. X.IR /bin/sh (1)
  600. Xso that a shell archive can be properly unpacked.
  601. XIf no files are specified,
  602. X.I unshar
  603. Xreads from standard input.
  604. XThe program is designed to be useful when unpacking archives directly
  605. Xfrom the news or mail systems (e.g., s | unshar).
  606. X.PP
  607. X.I Unshar
  608. Xnormally unpacks its files in the current directory.
  609. XUse the ``\-c'' option to have the program change to a new directory
  610. Xbefore invoking the shell.
  611. XIf the directory does not exist, it will try to create it.
  612. XIf the directory name starts with a question mark, then
  613. X.I unshar
  614. Xwill ask for the directory name before doing anything; this is most useful
  615. Xwith the environment variable UNSHAREDIR.
  616. XIf the directory name starts with a tilde, then the value of the HOME
  617. Xenvironment variable is inserted in place of that character.
  618. XFor convenience, the ``\-d'' option is a synonym for the ``\-c'' option.
  619. X.PP
  620. X.I Unshar
  621. Xnormally complains if the input looks like something other than a shar file.
  622. X(Among other things, it checks for files that resemble C, and Pascal code).
  623. XIt can be fooled, however, by nonstandard versions of news, notes, etc.
  624. XThe ``\-f'' option forces
  625. X.I unshar
  626. Xto try unpacking files, even if they look like something else.
  627. X.PP
  628. XDepending on how the program is installed,
  629. X.I unshar
  630. Xmay or may not try to preserve the header part of file ``foo''
  631. Xinto the name ``foo.hdr'' (if the file is standard input, the name
  632. Xwill be ``UNSHAR.HDR'').
  633. XUsing the ``\-s'' option forces the program to save the headers, while
  634. Xusing the ``\-n'' option forces it to discard the headers.
  635. XThe file is appended to, if it already exists, so all headers can be easily
  636. Xsaved in one file.
  637. XThe name of the file may be given by using the ``\-h'' option; this is
  638. Xparticularly useful when processing more than one file at a time.
  639. X.SH ENVIRONMENT
  640. X.ta \w'UNSHAREDIR  'u
  641. XHOME    Value used if a leading tilde is given in directory name.
  642. X.br
  643. XUNSHAREDIR    Default value for ``\-c'' option.
  644. X.SH SEE ALSO
  645. Xshar(1).
  646. SHAR_EOF
  647. if test 2326 -ne "`wc -c < 'unshar.man'`"
  648. then
  649.     echo shar: error transmitting "'unshar.man'" '(should have been 2326 characters)'
  650. fi
  651. fi # end of overwriting check
  652. #    End of shell archive
  653. exit 0
  654. tr.t_lab, TEXT);
  655. -}
  656. -
  657. -/*
  658. - *    Print out data.
  659. - */
  660. -
  661. -void    pdata(fid)
  662. -register  ef_fid  fid;
  663. -{
  664. -    register  long    dpos, endd;
  665. -    register  int    lng;
  666. -    unsigned  ctyp;
  667. -    int    had, par, inc;
  668. -    char    *msg;
  669. -    d_entry    dstr;
  670. -    
  671. -    (void) printf("\n.data\n");
  672. -    
  673. -    dpos = fid->ef_dbase;
  674. -    endd = dpos + fid->ef_dsize;
  675.